package app

import (
	"encoding/json"
	"log"
	"lowcode_deployment/pkg/rediser"
)

const RedisRequestChannelName = "lowcode_deployment_request_channel"
const RedisResponseChannelName = "lowcode_deployment_response_channel"

type Scheduler struct {
}

func (s *Scheduler) Run() {
	rediser.InitRedis()
	subscribe := rediser.Client.Subscribe(RedisRequestChannelName)
	defer subscribe.Close()
	for {
		msg, _ := subscribe.ReceiveMessage()
		log.Printf("channel=%s message=%s\n", msg.Channel, msg.Payload)
		var cmd Command

		err := json.Unmarshal([]byte(msg.Payload), &cmd)
		resp := getOkResp(cmd.Id)

		if err != nil {
			log.Printf("error:  %v", err)
			resp = getErrorResp(cmd.Id, err)
		} else {
			err = cmd.Exec()
			if err != nil {
				log.Printf("error: cmd exec err %v", err)
				resp = getErrorResp(cmd.Id, err)
			}
		}
		respRaw, _ := json.Marshal(&resp)
		rediser.Client.Publish(RedisResponseChannelName, respRaw)
	}
}

//func (s *Scheduler) Run1() {
//
//	cmd1 := Command{
//		Type:        "init",
//		AppId:       "app_1",
//		Version:     "",
//		Env:         "dev",
//		Port:        "10500",
//		CodeSrcPath: "",
//		CodeRunPath: "/home/hufengjiu/www/lowcode/dev/app_1",
//		CodeBakPath: "",
//	}
//
//	cmd11 := Command{
//		Type:        "init",
//		AppId:       "app_1",
//		Version:     "",
//		Env:         "pro",
//		Port:        "10501",
//		CodeSrcPath: "",
//		CodeRunPath: "/home/hufengjiu/www/lowcode/pro/app_1",
//		CodeBakPath: "",
//	}
//
//	cmd2 := Command{
//		Type:        "preview",
//		AppId:       "app_1",
//		Version:     "",
//		Env:         "dev",
//		Port:        "",
//		CodeSrcPath: "/home/hufengjiu/www/lowcode/src/app_1",
//		CodeRunPath: "/home/hufengjiu/www/lowcode/dev/app_1",
//		CodeBakPath: "",
//	}
//
//	cmd3 := Command{
//		Type:        "publish",
//		AppId:       "app_1",
//		Version:     "1.0.5",
//		Env:         "pro",
//		Port:        "",
//		CodeSrcPath: "/home/hufengjiu/www/lowcode/src/app_1",
//		CodeRunPath: "/home/hufengjiu/www/lowcode/pro/app_1",
//		CodeBakPath: "/home/hufengjiu/www/lowcode/bak/app_1",
//	}
//
//	cmd4 := Command{
//		Type:        "rollback",
//		AppId:       "app_1",
//		Version:     "1.0.4",
//		Env:         "pro",
//		Port:        "",
//		CodeSrcPath: "/home/hufengjiu/www/lowcode/src/app_1",
//		CodeRunPath: "/home/hufengjiu/www/lowcode/pro/app_1",
//		CodeBakPath: "/home/hufengjiu/www/lowcode/bak/app_1",
//	}
//
//	log.Printf("%v %v %v %v %v", cmd1.Type, cmd11.Type, cmd2.Type, cmd3.Type, cmd4.Type)
//
//	err := cmd2.Exec()
//	//err = cmd11.Exec()
//	if err != nil {
//		log.Printf("err %v", err)
//	}
//}
